"""
魔法方法解释：
    概述：
        在python中，有一类方法是用来对python类的功能进行加强（扩展）操作的，并且这一类的方法不需要手动调用（自动触发）
        在某些特定场景下，会被自动调用，因此被称之为：魔法方法

    格式：
        __魔法方法名__()     注意，这里是两个下划线。

    常用的魔法方法有：
        __init__()      用于初始化对象的属性值，在创建对象的时候，会被自动的调用
        __str__()       用于快速打印对象的各个属性值的，在输出语句打印对象的时候会被自动的调用。
        __del__()       当对象被删除（释放）的时候，或者main函数执行完毕后，会自动的调用
"""

# 需求：定义一个汽车类，默认设置车身颜色为黑色，车胎数量为4个，这两个属性值
# 场景1：不使用魔法方法
# class Car:
#     pass

# 场景2：使用魔法方法
class Car:
    # 魔法方法。创建对象时，会自动调用
    def __init__(self, color, number): # 方式2：类内，__init__()函数（魔法方法），这个方法默认是不显示的，但是可以显示，显式的做一些额外的事情
        self.color = color
        self.number = number

    def show(self): # 方式2：类内，self.属性名
        print(f"车身颜色：{self.color}, 车胎数量: {self.number}")

if __name__ == '__main__':
    car = Car("黑色", 4)     # 这行代码会触发：__init__(self)，意味着会执行self.color = "黑色"，self.number = 4
    # # 可以直接打印车胎数量和车身颜色
    car.show()      # 执行def show(self)，第一次输出：车身颜色：黑色, 车胎数量: 4
    #
    car.color ="红色" # 方式1：类外，对象名.属性 = 属性值，   将self.color由黑色修改为红色
    car.number = 6                                      #将self.number由4修改为6
    car.show()     # def show(self)，    第二次输出：车身颜色：红色, 车胎数量: 6

    # 这行代码是面向过程编程还是面向对象编程？
    print(len("adc"))

    # print("---------------------------------------------------------------------------------------------------------")
    # print(f"车身颜色：{car.color}, 车胎数量: {car.number}") #方式1：类外，对象名.属性名， 第三次输出：车身颜色：红色, 车胎数量: 6
    #
    # car2 = Car()   # 这行代码会触发：__init__(self)，意味着会执行self.color = "黑色"，self.number = 4
    # car2.show()   # 触发：def show(self)，第四次输出：车身颜色：黑色, 车胎数量: 4
